package com.example.demo;


/*
* Servlet过滤器。可以动态地拦截请求和响应，以变换或使用包含在请求或响应中的信息。
* 可以将一个或多个Servlet过滤器附加到一个Servlet或一组Servlet。Servlet过滤器也可以附加到JavaServer Pages文件和HTML页面。
* 调用Servlet前调用所有附加的Servlet过滤器。
* Servlet过滤器是可用于Servlet编程的java类，可以实现
*       在客户端的请求访问后端资源之前，拦截这些请求
*       在服务器的响应发送回客户端之前，处理这些响应
*
* */

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

/*
* Servlet过滤器方法
* 过滤器是一个实现了javax.servlet.Filter接口的Java类。javax.servlet.Filter接口定义了三个方法
* doFilter
* 该方法完成实际的过滤操作，当客户端请求方法与过滤器设置匹配的URL时，Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器
* init
* web应用程序启动时，web服务器将创建Filter的实例对象，并调用init方法，读取web.xml配置 完成对象的初始化对象
* */
@WebFilter(
        dispatcherTypes = {
                DispatcherType.REQUEST,
                DispatcherType.FORWARD,
                DispatcherType.INCLUDE,
                DispatcherType.ERROR
        }
)
public class LogFilter implements Filter {



    //web程序启动时，web服务器将创建Filter的实际对象，并调用init方法 完成对象的初始化功能。
    //通过init方法的参数 获得代表当前filter配置信息的FilterConfig对象
    public void init(FilterConfig filterConfig) throws ServletException {
        String site= filterConfig.getInitParameter("site");
        System.out.println("网站名称："+site);
    }


    //完成实际的过滤操作，当客户端请求方法与过滤器设置匹配的URL时，Servlet容器将先调用过滤器的doFilter方法。
    //FilterChain 用户访问后续过滤器
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("站点网址：www.baidu.com");
        filterChain.doFilter(servletRequest, servletResponse);
    }

    //Servlet容器在销毁过滤器实例前调用该方法 在该方法中释放Servlet过滤器占用的资源
    public void destroy() {

    }
}
